home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Asm / AB3DIIsrc / source_4000 / Land.s < prev    next >
Encoding:
Text File  |  1996-10-03  |  12.1 KB  |  900 lines

  1.  
  2.  
  3.  
  4.  
  5. maxscrdiv EQU 8
  6. max3ddiv EQU 5
  7.  
  8. zsinval EQU 8    ;w
  9. zcosval EQU 10    ;w
  10. ztox EQU 12    ;l
  11. xsinval EQU 16    ;w
  12. xcosval EQU 18    ;w
  13. xspd EQU 20    ;w
  14. zspd EQU 22    ;w
  15. mapx EQU 24    ;b
  16. mapz EQU 25    ;b
  17. whichtile EQU 26 ;b
  18. xofflight EQU 28    ;w
  19. zofflight EQU 30    ;w
  20. offlight EQU 32        ;w
  21. zlinestore EQU 34
  22. zlinedir EQU 38
  23. zposdir EQU 40
  24. zposstore EQU 42
  25. xdiststore EQU 44
  26. xdistdir EQU 46
  27. zwallfound EQU 48
  28.  
  29. xlinestore EQU 50
  30. xlinedir EQU 54
  31. xposdir EQU 56
  32. xposstore EQU 58
  33. zdiststore EQU 60
  34. zdistdir EQU 62
  35. xwallfound EQU 64
  36.  
  37.  
  38. midoffset EQU 104*4*40
  39.  
  40.  SECTION Scrn,CODE_F
  41.  
  42. OpenLib         equ -552        ; Offset for OpenLibrary.
  43. CloseLib        equ -414        ; Offset for CloseLibrary.
  44.  
  45. vhposr        equ $006
  46. vhposrl        equ $007 
  47. bltcon0        equ $40
  48. bltcon1        equ $42
  49. bltcpt        equ $48
  50. bltbpt        equ $4c
  51. bltapt        equ $50
  52. spr0ctl        equ $142
  53. spr1ctl        equ $14a
  54. spr2ctl        equ $152
  55. spr3ctl        equ $15a
  56. spr4ctl        equ $162
  57. spr5ctl        equ $16a
  58. spr6ctl        equ $172
  59. spr7ctl        equ $17a
  60. spr0pos        equ $140
  61. spr1pos        equ $148
  62. spr2pos        equ $150
  63. spr3pos        equ $158
  64. spr4pos        equ $160
  65. spr5pos        equ $168
  66. spr6pos        equ $170
  67. spr7pos        equ $178
  68. bltdpt         equ $54
  69. bltafwm        equ $44
  70. bltalwm        equ $46
  71. bltsize         equ $58
  72. bltcmod         equ $60
  73. bltbmod         equ $62
  74. bltamod         equ $64
  75. bltdmod         equ $66
  76. diwstart        equ $8e         ; Screen hardware registers.
  77. diwstop         equ $90
  78. ddfstart        equ $92
  79. ddfstop         equ $94
  80. bplcon0         equ $100
  81. bplcon1         equ $102
  82. col0            equ $180
  83. col1            equ $182
  84. col2        equ $184
  85. col3        equ $186
  86. col4        equ $188
  87. col5        equ $18a
  88. col6        equ $18c
  89. col7        equ $18e
  90. col8            equ $190
  91. col9            equ $192
  92. col10           equ $194
  93. dmacon        equ $96
  94. dmaconr        equ $002
  95. intenar        equ $01c
  96. intena        equ $09a
  97. intreq        equ $09c
  98. intreqr        equ $01e
  99. intreqrl    equ $01f
  100. bpl1pth         equ $e0
  101. bpl1ptl         equ $e2
  102. bpl2pth        equ $e4
  103. bpl2ptl        equ $e6
  104. bpl3pth        equ $e8
  105. bpl3ptl        equ $ea
  106. bpl4pth        equ $ec
  107. bpl4ptl        equ $ee
  108. bpl5pth        equ $f0
  109. bpl5ptl        equ $f2
  110. bpl6pth        equ $f4
  111. bpl6ptl        equ $f6
  112. bpl7pth        equ $f8
  113. bpl7ptl        equ $fa
  114.  
  115. ** This waits for the blitter to finish before allowing program
  116. ** execution to continue.
  117.  
  118. WB MACRO
  119. \@bf:
  120.  btst #6,dmaconr(a6)
  121.  bne.s \@bf
  122.  ENDM
  123.  
  124. *Another version for when d6 <> dff000
  125.  
  126. WBSLOW MACRO
  127. \@bf:
  128.  btst #6,$dff000+dmaconr
  129.  bne.s \@bf
  130.  ENDM
  131.  
  132.  
  133. **
  134.  
  135.  include "macros.i"
  136.  
  137.  move.w (a0),option
  138.  
  139.  jmp stuff
  140. endstuff:
  141.  
  142.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  143.  move.w #$87c0,dmacon(a6)
  144.  move.w #$0020,dmacon(a6)
  145.  move.w intenar(a6),saveinters
  146.  move.w #$7fff,intena(a6)
  147.  move.w #$c010,intena(a6)
  148.  
  149. *** Put myself in supervisor mode
  150.  
  151.  move.w #$20,$dff1dc
  152.  
  153.  jmp blag
  154.  
  155. ; move.l #blag,$80
  156. ; trap #0
  157. ; rts
  158.  
  159. saveit: dc.l 0
  160.  
  161. blag:
  162.  move.w #$10,intreq(a6)
  163.  move.w #$7fff,intena(a6)
  164.  
  165.  
  166.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  167.  move.l #$dff000,a6    ; a6 points at the first custom chip register.
  168.  
  169.  move.w #0,d0
  170.  
  171.  move.l #scrn,d0
  172.  move.w d0,pl1l
  173.  swap d0
  174.  move.w d0,pl1h
  175.  
  176.  move.l #scrn+40,d0
  177.  move.w d0,pl2l
  178.  swap d0
  179.  move.w d0,pl2h
  180.  
  181.  move.l #scrn+80,d0
  182.  move.w d0,pl3l
  183.  swap d0
  184.  move.w d0,pl3h
  185.  
  186.  move.l #scrn+120,d0
  187.  move.w d0,pl4l
  188.  swap d0
  189.  move.w d0,pl4h
  190.  
  191.  move.l #scrn+160,d0
  192.  move.w d0,pl5l
  193.  swap d0
  194.  move.w d0,pl5h
  195.  
  196.  move.l #scrn+200,d0
  197.  move.w d0,pl6l
  198.  swap d0
  199.  move.w d0,pl6h
  200.  
  201.  move.l #scrn+240,d0
  202.  move.w d0,pl7l
  203.  swap d0
  204.  move.w d0,pl7h
  205.  
  206.  move.l #colbars,a0
  207.  move.l #colbars2,a2
  208.  move.w #127,d0
  209.  move.l #0,d6
  210.  move.w #0,d3
  211.  move.w #$2bdf,startwait
  212.  move.w #$2d01,endwait
  213. fillcop
  214.  move.w #$180,d1
  215.  
  216.  move.l a0,a1
  217.  move.l a2,a3
  218.  move.w #$10c,(a1)+
  219.  move.w #$10c,(a3)+
  220.  move.w d3,(a1)+
  221.  move.w d3,(a3)+
  222.  eor.w #$8000,d3
  223.  
  224.  move.w #$106,(a1)+
  225.  move.w #$106,(a3)+
  226.  move.w #$2c40,d5
  227.  or.w d3,d5
  228.  move.w d5,(a1)+
  229.  move.w d5,(a3)+
  230.  bsr do32
  231.  
  232.  move.w #$106,(a1)+
  233.  move.w #$106,(a3)+
  234.  move.w #$4c40,d5
  235.  or.w d3,d5
  236.  move.w d5,(a1)+
  237.  move.w d5,(a3)+
  238.  bsr do32
  239.  
  240.  move.w #$106,(a1)+
  241.  move.w #$106,(a3)+
  242.  move.w #$6c40,d5
  243.  or.w d3,d5
  244.  move.w d5,(a1)+
  245.  move.w d5,(a3)+
  246.  bsr do32
  247.  
  248. **********************************
  249.  
  250.  cmp.b #'s',option
  251.  beq.s smallscrn
  252.  
  253.  move.w startwait,(a1)+
  254.  move.w #$fffe,(a1)+
  255.  move.w endwait,(a1)+
  256.  move.w #$ff00,(a1)+
  257.  move.w startwait,(a3)+
  258.  move.w #$fffe,(a3)+
  259.  move.w endwait,(a3)+
  260.  move.w #$ff00,(a3)+
  261.  
  262.  add.w #$300,startwait
  263.  add.w #$300,endwait
  264.  
  265. smallscrn: 
  266. **********************************
  267.  
  268.  adda.w #104*4,a0
  269.  adda.w #104*4,a2
  270.  
  271.  dbra d0,fillcop
  272.  
  273. **********************************
  274.  cmp.b #'s',option
  275.  beq smallnotlarge
  276.  move.w #$38,fetchstart
  277.  move.w #$b8,fetchstop
  278.  move.w #$2c81,winstart
  279.  move.w #$2cc1,winstop
  280.  move.w #-40,modulo
  281.  move.w #-40,modulo+4
  282.  
  283.  move.l #scrn+40,a0
  284.  move.l #scrn+160,a1
  285.  move.l #scrn+280,a2
  286.  move.l #scrntab,a3
  287.  move.w #319,d7    ; counter
  288.  move.w #0,d1    ; xpos
  289. plotscrnloop:
  290.  move.b (a3)+,d0
  291.  move.w d1,d2
  292.  asr.w #3,d2
  293.  move.b d1,d3
  294.  not.b d3
  295.  bclr.b d3,-40(a0,d2.w)
  296.  bclr.b d3,(a0,d2.w)
  297.  bclr.b d3,40(a0,d2.w)
  298.  bclr.b d3,-40(a1,d2.w)
  299.  bclr.b d3,(a1,d2.w)
  300.  bclr.b d3,40(a1,d2.w)
  301.  bclr.b d3,-40(a2,d2.w)
  302.  btst #0,d0
  303.  beq.s nobp1
  304.  bset.b d3,-40(a0,d2.w)
  305. nobp1:
  306.  btst #1,d0
  307.  beq.s nobp2
  308.  bset.b d3,(a0,d2.w)
  309. nobp2:
  310.  btst #2,d0
  311.  beq.s nobp3
  312.  bset.b d3,40(a0,d2.w)
  313. nobp3:
  314.  btst #3,d0
  315.  beq.s nobp4
  316.  bset.b d3,-40(a1,d2.w)
  317. nobp4:
  318.  btst #4,d0
  319.  beq.s nobp5
  320.  bset.b d3,(a1,d2.w)
  321. nobp5:
  322.  btst #5,d0
  323.  beq.s nobp6
  324.  bset.b d3,40(a1,d2.w)
  325. nobp6:
  326.  btst #6,d0
  327.  beq.s nobp7
  328.  bset.b d3,-40(a2,d2.w)
  329. nobp7:
  330.  
  331.  addq #1,d1
  332.  
  333.  dbra d7,plotscrnloop
  334.  
  335. smallnotlarge:
  336.  
  337. **********************************
  338.  
  339. ****************************
  340. ; bsr initobjpos
  341. ****************************
  342.  
  343. lop: 
  344.  
  345.  move.l #$dff000,a6
  346.  
  347. waitfortop:
  348.  btst.b #0,intreqrl(a6)
  349.  beq waitfortop
  350.  move.w #$1,intreq(a6)
  351.  
  352.  
  353.  move.l drawpt,d0
  354.  move.l olddrawpt,drawpt
  355.  move.l d0,olddrawpt
  356.  move.l d0,$dff084
  357.  move.l drawpt,a3
  358.  adda.w #10,a3
  359.  move.l a3,frompt
  360.  add.l #104*4*40,a3
  361.  move.l a3,midpt
  362.  
  363.  move.l #landfile,a1
  364.  move.l #landpic,a5
  365.  move.l frompt,a0
  366.  move.l #104*4,d0
  367.  move.l #landcheat+(48+90)*4,a2
  368.  
  369.  move.w angspd,d1
  370.  move.w ang,d0
  371.  
  372.  move.w #2,d7
  373.  
  374.  move.w d1,d2
  375.  neg.w d2
  376.  cmp.w d7,d2
  377.  ble.s okslow
  378.  move.w d7,d2
  379. okslow
  380.  neg.w d7
  381.  cmp.w d7,d2
  382.  bge.s okslo
  383.  move.w d7,d2
  384. okslo:
  385.  
  386.  asr.w #1,d7
  387.  
  388.  btst #1,$d(a6)
  389.  sne d3
  390.  beq.s notleft
  391.  move.w d7,d2
  392.  neg.w d2
  393. ; tst.w d1
  394. ; bge.s notleft
  395. ; moveq #0,d1
  396. notleft
  397.  
  398.  btst #1,$c(a6)
  399.  sne d4
  400.  beq.s notright
  401.  move.w d7,d2
  402. ; tst.w d1
  403. ; ble.s notright
  404. ; moveq #0,d1
  405. notright
  406.  
  407.  move.w #0,Spd
  408.  
  409.  btst #0,$dff00c
  410.  sne d5
  411.  eor.b d4,d5
  412.  beq.s notup
  413.  move.w #4,Spd
  414. notup:
  415.  
  416.  btst #0,$dff00d
  417.  sne d5
  418.  eor.b d3,d5
  419.  beq.s notdown
  420.  move.w #-4,Spd
  421. notdown:
  422.  
  423.  move.w Spd,d7
  424.  
  425.  add.w d2,d1
  426.  cmp.w #-10,d1
  427.  bge.s okspdlft
  428.  move.w #-10,d1
  429. okspdlft:
  430.  cmp.w #10,d1
  431.  ble.s okspdrgt
  432.  move.w #10,d1
  433. okspdrgt:
  434.  
  435.  move.w d1,angspd
  436.  add.w d1,d0
  437.  ext.l d0
  438.  add.l #360,d0
  439.  divs #360,d0
  440.  swap d0
  441.  move.w d0,ang
  442.  
  443.  lea (a2,d0.w*4),a2
  444.  move.l (a2),d0
  445.  asr.l #8,d0
  446.  move.w d0,tempx
  447.  
  448.  muls d0,d7
  449.  add.w d7,zpos
  450.  
  451.  suba.w #90*4,a2
  452.  move.l (a2),temp
  453.  suba.w #48*4,a2
  454.  
  455.  move.w Spd,d7
  456.  add.w d7,d7
  457.  move.l temp,d0
  458.  asr.l #1,d0
  459.  muls d0,d7
  460.  asr.l #8,d7
  461.  add.w d7,xpos
  462.  
  463.  move.w zpos,d7
  464.  move.b xpos,d7
  465.  move.w d7,zoff
  466.  
  467.  move.w #2,d7
  468.  moveq #0,d4
  469.  moveq #0,d1
  470.  moveq #0,d6
  471.  move.w zoff,d6
  472.  moveq #0,d0
  473.  move.b (a1,d6.l),d0
  474.  sub.b #160,d0
  475.  
  476. ; d0 = targyoff
  477.  
  478.  move.w yoff,d1
  479.  sub.w d1,d0
  480.  bgt.s notinfloor
  481.  add.w d0,d1
  482.  asl.w #1,d0
  483.  
  484.  cmp.w yvel,d0
  485.  bge.s nopushup
  486.  
  487.  move.w d0,yvel
  488. nopushup:
  489. notinfloor:
  490.  move.w yvel,d0
  491.  asr.w #2,d0
  492.  add.w d0,d1
  493.  
  494.  bge.s okoffset
  495.  move.w #0,d1
  496. okoffset:
  497.  
  498.  and.w #$ff,d1
  499.  move.w d1,yoff
  500.  
  501.  add.w #4,yvel
  502.  
  503. donemovey
  504.  
  505.  move.l #heightcheat,a6
  506.  move.w yoff,d0
  507.  sub.w d0,a6
  508.  move.w #256,d5
  509.  move.l frompt,a4
  510.  add.l #100*104*4,a4
  511.  
  512.  move.l #skypic,skyaddr
  513.  
  514.  move.w ang,d2
  515.  
  516.  muls #320,d2
  517.  add.l d2,skyaddr
  518.  
  519.  move.l #landpal+512*5,a3
  520.  
  521.  bsr doblock
  522.  addq #4,a4
  523.  bsr doblock
  524.  addq #4,a4
  525.  bsr doblock
  526.  
  527.  move.l #$dff000,a6
  528.  
  529.  btst #6,$bfe001
  530.  beq end
  531.  
  532.  bra lop
  533.  
  534. end:
  535.  move.w #$f8e,$dff1dc
  536.  jmp closeeverything 
  537.  
  538. spd: dc.w 0
  539. ang: dc.w 0
  540. angspd: dc.w 0
  541. tempx: dc.l 0
  542. zoff: dc.w 0
  543. option: dc.w 0
  544. temp: dc.l 0
  545.  
  546. yvel: dc.w 0
  547.  
  548. xpos: dc.w 0
  549. zpos: dc.w 0
  550.  
  551. doblock:
  552.  move.w #31,d3
  553. acrossl:
  554.  move.l 90*4(a2),d5
  555.  asr.l #8,d5
  556.  move.l (a2)+,a0
  557.  add.l temp(pc),a0
  558.  add.w tempx(pc),d5
  559.  moveq #0,d7
  560.  swap d3
  561.  move.w zoff(pc),d3
  562.  move.w d6,-(a7)
  563.  moveq #0,d4
  564.  swap d6
  565.  clr.w d6
  566.  move.l a6,-(a7)
  567.  move.l a4,-(a7)
  568.  swap d5
  569.  move.w #14,d5
  570.  moveq.l #89,d2
  571. outerland:
  572.  swap d5
  573. putinland:
  574.  move.w d3,d4
  575.  swap d6
  576.  move.b d6,d4
  577.  swap d6
  578.  add.l a0,d6
  579.  add.w d5,d3
  580.  move.b (a1,d4.l),d1
  581.  move.b (a6,d1.w),d0
  582.      
  583.  sub.b d7,d0
  584.  ble.s allbehind 
  585.  swap d2
  586.  add.b d0,d7
  587.  move.b (a5,d4.l),d2
  588.  move.w (a3,d2.w*2),d4
  589. upstrip
  590.  move.w d4,(a4)
  591.  suba.w #104*4,a4
  592.  subq #1,d0
  593.  bgt.s upstrip
  594.  swap d2
  595.  
  596. allbehind:
  597.  adda.w #256,a6
  598.  dbra d2,putinland 
  599.  
  600.  swap d5
  601.  moveq.l #3,d2
  602.  adda.w #512,a3
  603.  dbra d5,outerland
  604.  
  605.  move.l #landpal,a3
  606.  
  607.  move.l skyaddr(pc),a6
  608.  move.w #99,d2
  609.  sub.w d7,d2
  610.  ble.s noclrbit
  611.  lea (a6,d2.w*2),a6
  612. clrbit:
  613.  move.w -(a6),(a4)
  614.  suba.w #104*4,a4
  615.  subq #1,d2
  616.  bgt.s clrbit
  617. noclrbit:
  618.  
  619.  move.l skyaddr,d2
  620.  add.l #160,d2
  621.  cmp.l #endsky,d2
  622.  blt.s nobacktobeginning
  623.  
  624.  move.l #skypic,d2
  625.  
  626. nobacktobeginning:
  627.  move.l d2,skyaddr
  628.  
  629.  move.l (a7)+,a4
  630.  move.l (a7)+,a6
  631.  move.w (a7)+,d6
  632.  addq #4,a4
  633.  swap d3
  634.  dbra d3,acrossl
  635.  rts
  636.  
  637. skyaddr: dc.l 0
  638.  
  639. do32:
  640.  move.w #31,d7
  641.  move.w #$180,d1
  642. across:
  643.  move.w d1,(a1)+
  644.  move.w d1,(a3)+
  645.  move.w #0,(a1)+
  646.  move.w #0,(a3)+
  647.  add.w #2,d1
  648.  dbra d7,across
  649.  rts
  650.  
  651.  
  652.  
  653. *************************************
  654. * Set left and right clip values
  655. *************************************
  656.  
  657.  
  658. everyframe:
  659.  
  660.  move.w #$0010,$dff000+intreq
  661.  
  662.  rte
  663.  
  664. saveinters:  
  665.  dc.w 0
  666.  
  667. z: dc.w 10
  668. midpt: dc.l 0
  669.  
  670. test: dc.l 0
  671.  ds.l 30
  672.  
  673. drawpt: dc.l colbars2
  674. olddrawpt: dc.l colbars
  675. frompt: dc.l colbars2 
  676.  
  677. Spd:
  678. angpos: dc.w 0
  679. wallyoff: dc.w 0
  680. flooryoff: dc.w 0
  681. xoff: dc.l 0
  682. yoff: dc.w 255-160
  683. tyoff: dc.l 0
  684.  
  685.  
  686. liftanimtab:
  687.  
  688. endliftanimtab:
  689.  
  690. Roompt: dc.l 0
  691. OldRoompt: dc.l 0
  692.  
  693. wallpt: dc.l 0
  694. floorpt: dc.l 0
  695.  
  696. Rotated:
  697.  ds.l 800 
  698.  
  699. OnScreen:
  700.  ds.l 800 
  701.  
  702. startwait: dc.w 0
  703. endwait: dc.w 0
  704.  
  705.  
  706. landcheat: incbin "work:inc/smallcheatfile"
  707. landfile: incbin "work:inc/landfile"
  708. heightcheat: incbin "work:inc/heightcheat"
  709. landpic: incbin "work:inc/landpic"
  710. landpal: incbin "work:inc/landpal"
  711.  
  712. skypic: dcb.w 160*360,$742
  713. endsky:
  714.  
  715.  SECTION ffff,CODE_C
  716.  
  717. bigfield:                    ; Start of our copper list.
  718.  
  719.  dc.w intreq,$8001
  720.  dc.w $1fc,$3
  721.  dc.w diwstart
  722. winstart: dc.w $2cb1
  723.  dc.w diwstop
  724. winstop: dc.w $2c91
  725.  dc.w ddfstart
  726. fetchstart: dc.w $48
  727.  dc.w ddfstop
  728. fetchstop: dc.w $88
  729.  
  730.  dc.w bplcon0,$7201
  731.  dc.w bplcon1
  732. smoff:
  733.  dc.w $0
  734.  
  735.  dc.w col0,0
  736.  
  737.  dc.w $108
  738. modulo: dc.w -24
  739.  dc.w $10a,-24
  740.  
  741.  dc.w bpl1pth
  742. pl1h
  743.  dc.w 0
  744.  
  745.  dc.w bpl1ptl
  746. pl1l
  747.  dc.w 0
  748.  
  749.  dc.w bpl2pth
  750. pl2h
  751.  dc.w 0
  752.  
  753.  dc.w bpl2ptl
  754. pl2l
  755.  dc.w 0
  756.  
  757.  dc.w bpl3pth
  758. pl3h
  759.  dc.w 0
  760.  
  761.  dc.w bpl3ptl
  762. pl3l
  763.  dc.w 0
  764.  
  765.  dc.w bpl4pth
  766. pl4h
  767.  dc.w 0
  768.  
  769.  dc.w bpl4ptl
  770. pl4l
  771.  dc.w 0
  772.  
  773.  dc.w bpl5pth
  774. pl5h
  775.  dc.w 0
  776.  
  777.  dc.w bpl5ptl
  778. pl5l
  779.  dc.w 0
  780.  
  781.  dc.w bpl6pth
  782. pl6h
  783.  dc.w 0
  784.  
  785.  dc.w bpl6ptl
  786. pl6l
  787.  dc.w 0
  788.  
  789.  dc.w bpl7pth
  790. pl7h
  791.  dc.w 0
  792.  
  793.  dc.w bpl7ptl
  794. pl7l
  795.  dc.w 0
  796.  
  797.  
  798.  dc.w $1001,$ff00
  799.  dc.w intreq,$1
  800. yposcop:
  801.  dc.w $2a11,$fffe
  802.  dc.w $8a,0
  803.  
  804.  dcb.l 104*40,$1fe0000
  805. colbars:
  806. val SET $2a
  807.  dcb.l 104*128,$1fe0000
  808.  
  809.  dc.w $ffff,$fffe       ; End copper list.
  810.  
  811. old dc.l 0
  812.  
  813.  dcb.l 104*40,$1fe0000
  814.  
  815. colbars2:
  816. val SET $2a
  817.  dcb.l 104*128,$1fe0000
  818.  
  819.  dc.w $106,$c40
  820.  dc.w $180
  821. signal: dc.w 0
  822.  
  823.  dc.w $ffff,$fffe       ; End copper list.
  824.  
  825.  dc.w $0
  826.  
  827.  
  828. ********************************************
  829. * Stuff you don't have to worry about yet. *
  830. ********************************************
  831.  
  832. closeeverything:
  833.  move.l old,$dff080     ; Restore old copper list.
  834.  move.w #$8020,dmacon(a6)
  835.  move.w saveinters,d0
  836.  or.w #$c000,d0
  837.  move.w d0,intena(a6)
  838.  clr.w $dff0a8
  839.  clr.w $dff0b8
  840.  clr.w $dff0c8
  841.  clr.w $dff0d8
  842.  rts
  843.  
  844. stuff:
  845.  move.l 4.w,a6          ; Get EXECBASE.
  846.  lea gfxname(PC),a1     ; Point to 'graphics.library' string.
  847.  moveq #0,d0            ; Ignore version number.
  848.  jsr OpenLib(a6)        ; Open the library.
  849.  move.l d0,a1           ; Store library address.
  850.  move.l 38(a1),old      ; Store workbench copper address.
  851.  move.l 4.w,a6          ; Get EXECBASE again.    
  852.  jsr CloseLib(a6)       ; Close the library.
  853.  
  854.  jmp endstuff
  855.  
  856. gfxname dc.b "graphics.library",0
  857.  
  858. scrntab:
  859.  ds.b 16
  860. val SET 32
  861.  REPT 96
  862.  dc.b val,val,val
  863. val SET val+1
  864.  ENDR
  865.  ds.b 16
  866.  
  867.  cnop 0,64
  868. scrn:
  869.  
  870.  dcb.l 8,$33333333
  871.  dc.l 0
  872.  dc.l 0
  873.  
  874.  dcb.l 8,$0f0f0f0f
  875.  dc.l 0
  876.  dc.l 0
  877.  
  878.  dcb.l 8,$00ff00ff
  879.  dc.l 0
  880.  dc.l 0
  881.  
  882.  dcb.l 8,$0000ffff
  883.  dc.l 0
  884.  dc.l 0
  885.  
  886.  dc.l 0,-1,0,-1,0,-1,0,-1
  887.  dc.l 0
  888.  dc.l 0
  889.  
  890.  dc.l -1,-1,0,0,-1,-1,0,0
  891.  dc.l 0
  892.  dc.l 0
  893.  
  894.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  895.  dc.l 0
  896.  dc.l 0
  897.  
  898.  
  899.  
  900.